package com.sms.service;

import com.sms.exception.DataFileCorruptedException;
import com.sms.exception.SMSException;
import com.sms.model.Course;

import java.util.List;

/**
 * 课程管理服务接口
 * 位置：com.sms.service.CourseService
 */
public interface CourseService {
    /**
     * 添加课程信息
     * @param course 课程对象
     * @throws SMSException 当课程ID已存在或数据无效时抛出
     * @throws DataFileCorruptedException 当数据文件损坏时抛出
     */
    void addCourse(Course course) throws SMSException, DataFileCorruptedException;
    
    /**
     * 删除课程信息
     * @param courseId 课程ID
     * @return true-删除成功, false-课程不存在
     * @throws DataFileCorruptedException 当数据文件损坏时抛出
     */
    boolean deleteCourse(String courseId) throws DataFileCorruptedException;
    
    /**
     * 根据课程ID查询课程信息
     * @param courseId 课程ID
     * @return 课程对象，未找到时返回null
     * @throws DataFileCorruptedException 当数据文件损坏时抛出
     */
    Course getCourse(String courseId) throws DataFileCorruptedException;
    
    /**
     * 获取所有课程列表
     * @return 课程列表（按课程ID排序）
     * @throws DataFileCorruptedException 当数据文件损坏时抛出
     */
    List<Course> getAllCourses() throws DataFileCorruptedException;
    
    /**
     * 根据课程名称搜索课程
     * @param keyword 课程名称关键词
     * @return 匹配的课程列表
     * @throws DataFileCorruptedException 当数据文件损坏时抛出
     */
    List<Course> searchCoursesByName(String keyword) throws DataFileCorruptedException;
    
    /**
     * 检查课程ID是否存在
     * @param courseId 课程ID
     * @return true-存在, false-不存在
     * @throws DataFileCorruptedException 当数据文件损坏时抛出
     */
    boolean existsCourse(String courseId) throws DataFileCorruptedException;
    
    /**
     * 获取课程总数
     * @return 课程数量
     * @throws DataFileCorruptedException 当数据文件损坏时抛出
     */
    int getCourseCount() throws DataFileCorruptedException;
}